package seed_category

import (
	_ "app/api/schema"
	rich_err "app/error"
	_ "app/models"
	"app/service/seed_category"
	"app/utils"
	"github.com/gin-gonic/gin"
	"strconv"
)

func Init(group *gin.RouterGroup) {
	Gets(group)
	Get(group)
	Create(group)
	Update(group)
	Delete(group)
}

// @Summary 获取种子分类列表
// @Tags seed_category
// @Produce json
// @Description.markdown desc_common_page
// @param page_size query integer false "用于分页的每页最大元素数量" minimum(1)
// @param page_index query integer false "请求的页码" minimum(1)
// @param order query string false "需要排序的字段,如需倒序,字段名前面加 `-`"
// @Success 200 {object} schema.Response{data=[]models.SeedCategory}
// @Failure 400,500 {object} schema.ResponseErr
// @Router /api/v1/seed_category [get]
func Gets(group *gin.RouterGroup) {
	group.GET("/", func(context *gin.Context) {
		data, pager, err := seed_category.Gets(context)
		utils.GinJSONPageWithRichErr(context, data, pager, err)
	})
}

// @Summary 获取指定种子分类信息
// @Tags seed_category
// @Produce json
// @Success 200 {object} schema.Response{data=models.SeedCategory}
// @Failure 404,500 {object} schema.ResponseErr
// @Param id path string true "种子分类ID"
// @Router /api/v1/seed_category/{id} [get]
func Get(group *gin.RouterGroup) {
	group.GET("/:id", func(context *gin.Context) {
		_, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		data, richErr := seed_category.Get(context)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 创建种子分类
// @Tags seed_category
// @Accept json
// @Produce json
// @Param req body models.SeedCategoryCore true "种子分类核心信息"
// @Success 200 {object} schema.Response{data=models.SeedCategory}
// @Failure 400,500 {object} schema.ResponseErr
// @Router /api/v1/seed_category [post]
func Create(group *gin.RouterGroup) {
	group.POST("/", func(context *gin.Context) {
		data, richErr := seed_category.Create(context)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 修改种子分类
// @Tags seed_category
// @Accept json
// @Produce json
// @Param req body models.SeedCategoryDelta true "种子分类修改信息"
// @Param id path string true "种子分类ID"
// @Success 200 {object} schema.Response{data=models.SeedCategory}
// @Failure 400,500 {object} schema.ResponseErr
// @Router /api/v1/seed_category/{id} [patch]
func Update(group *gin.RouterGroup) {
	group.PATCH("/:id", func(context *gin.Context) {
		_, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		data, richErr := seed_category.Update(context)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 删除种子分类
// @Tags seed_category
// @Produce json
// @Param id path string true "种子分类ID"
// @Success 200 {object} schema.Response
// @Failure 400,500 {object} schema.ResponseErr
// @Router /api/v1/seed_category/{id} [delete]
func Delete(group *gin.RouterGroup) {
	group.DELETE("/:id", func(context *gin.Context) {
		_, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		richErr := seed_category.Delete(context)
		utils.GinJSONWithRichErr(context, nil, richErr)
	})
}
